package cn.edu.xjtu.work.isSymmetric;

import cn.edu.xjtu.Util.TreeNode.TreeNode;

/**
 * 101. 对称二叉树
 * 
 * 给定一个二叉树，检查它是否是镜像对称的。
 */
public class Solution {
  public boolean isSymmetric(TreeNode root) {
    return isSymmetricNode(root.left, root.right);
  }

  /**
   * 深度优先算法
   * 
   * @param p
   * @param q
   * @return
   */
  public boolean isSymmetricNode(TreeNode p, TreeNode q) {
    if (p == null && q == null) {
      return true;
    }
    if (p == null || q == null) {
      return false;
    }
    if (p.val != q.val) {
      return false;
    }
    return isSymmetricNode(p.left, q.right) && isSymmetricNode(p.right, q.left);
  }
}
